/**
 * @ClassName OperatorTest
 * @Description TODO
 * @Author 李明忠
 * @Date 2025/5/12 17:14
 * @Version 1.0
 */
public class OperatorTest {
    /**
     * 条件运算符
     * @param args
     */
    public static void main(String[] args) {
        //表达式2和表达式3数据类型需要一致或者有自动类型转换
        int num = 10 > 2 ? 10 : 8;
        double d = 10 < 4 ? 10 : 12.0;
        System.out.println(num);
        System.out.println(d);
    }
    /**
     * 移位运算符
     * @param args
     */
    public static void main7(String[] args) {
        System.out.println(10 << 1);
        System.out.println(10 >> 1);
        System.out.println(10 >>> 1);
    }
    /**
     * 位运算符
     * @param args
     */
    public static void main6(String[] args) {
        //&和|如果表达式为布尔表达式，那么可以作为逻辑判断，但是非短路
        System.out.println((10 > 8) | false);
        System.out.println(10 ^ 9);
        System.out.println(~9);
    }
    /**
     * 逻辑运算符：&& || !
     * @param args
     */
    public static void main5(String[] args) {
        //逻辑运算符的表达式只能是boolean表达式
        //&& 短路
        System.out.println(false && true);
        // ||短路
        System.out.println((12 > 0) || true);
        System.out.println(!false);
    }
    /**
     * 关系运算符
     * @param args
     */
    public static void main4(String[] args) {
        //关系运算符的结果是boolean类型
        System.out.println(10 < 5);
        System.out.println(10 > 5);
        System.out.println(10 == 5);
        System.out.println(10 != 5);
    }
    /**
     * 自增运算符
     * @param args
     */
    public static void main3(String[] args) {
        int a = 10;
        System.out.println(a++);
        System.out.println(++a);
        System.out.println(a--);
        System.out.println(--a);
    }
    /**
     * 增量运算符
     * @param args
     */
    public static void main2(String[] args) {
        //增量运算符中存在着类型转换规则
        //1.如果类型相同那么不会发生类型转换
        int num = 10;
        System.out.println(num -= 9);
        //2.如果类型不同那么就会发生自动类型转换
        //规则：double a = 10.0; b += a; <==> int b = (int) (b + a);
        double a = 10.0;
        int b = 10;
        b += a;
        System.out.println(b);
    }
    /**
     * 算术运算符
     * @param args
     */
    public static void main1(String[] args) {
        System.out.println(1 + 2);
        System.out.println(1 - 2);
        System.out.println(1 * 2);
        System.out.println(1 / 2);
        System.out.println(1 % 2);

        //注意如果向保留小数则必须使用一下方法：
        System.out.println(1 / 2.0);
        System.out.println(1.0 / 2.0);
        System.out.println(1.0 / 2);
        System.out.println(1 / (2 * 1.0));

        //对于%和/分母不能为0
//        System.out.println(1 / 0);//算数异常
        /**
         * Exception in thread "main" java.lang.ArithmeticException: / by zero
         * 	at OperatorTest.main(OperatorTest.java:27)
         */

        //对于%的符号取决于从左到用第一个数据的符号
        System.out.println(-7 % 10);
        System.out.println(-7 % -10);
        System.out.println(7 % -10);
        System.out.println(7 % 10);
    }
}
